package com.service.impl;


import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.dao.UsersDao;
import com.entity.UsersEntity;
import com.service.UsersService;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;


/**
 * 系统用户
 * @author
 */
@Service("userService")
public class UsersServiceImpl extends ServiceImpl<UsersDao, UsersEntity> implements UsersService {

    /**
     * 根据参数查询用户分页信息
     * @param params 查询参数，可以包括分页信息及其他过滤条件
     * @return 分页查询结果，包含总记录数和当前页的数据列表
     */
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        // 创建并返回分页查询结果的实例
        Page<UsersEntity> page = this.selectPage(
                // 使用Query对象封装分页参数，并从中提取分页信息
                new Query<UsersEntity>(params).getPage(),
                // 创建一个用户实体的EntityWrapper，用于后续可能的查询条件设置
                new EntityWrapper<UsersEntity>());
        // 将分页查询结果封装成PageUtils并返回
        return new PageUtils(page);
    }

    /**
     * 根据指定条件查询用户列表
     * @param wrapper 查询条件封装器，用于构建SQL WHERE条件等
     * @return 用户实体列表，如果查询不到匹配的记录，则返回空列表
     */
    @Override
    public List<UsersEntity> selectListView(Wrapper<UsersEntity> wrapper) {
        return baseMapper.selectListView(wrapper);
    }

    /**
     * 根据参数查询用户列表并返回分页结果
     * @param params  查询参数，包含分页信息等
     * @param wrapper 实体包装器，用于条件查询
     * @return 分页查询结果，包含用户记录和分页信息
     * 该方法首先根据传入的查询参数创建分页对象，然后调用数据库操作方法
     * 根据条件包装器获取用户列表，并将结果记录设置到分页对象中最后将分页对象
     * 转换为自定义的分页工具类并返回
     */
    @Override
    public PageUtils queryPage(Map<String, Object> params, Wrapper<UsersEntity> wrapper) {
        // 创建分页对象，解析查询参数中的分页信息
        Page<UsersEntity> page = new Query<UsersEntity>(params).getPage();
        // 执行查询，获取符合条件的用户列表
        page.setRecords(baseMapper.selectListView(page, wrapper));
        // 将分页对象转换为自定义的分页工具类，并返回
        PageUtils pageUtil = new PageUtils(page);
        return pageUtil;
    }
}
